﻿Public Class Gestion_Temas
    Enum estado
        inicial
        insertar
        modificar
    End Enum
    Dim operacion As estado = estado.inicial
    Dim nombre_tabla As String = "tema"
    Dim id As String = ""
    Dim tratamiento As New Tratamiento_Objetos
    Dim datos_clase As New datos


    Private Sub txt_titulo_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt_titulo.KeyPress
        If Not Char.IsLetter(e.KeyChar) And Not Char.IsControl(e.KeyChar) And Not Char.IsWhiteSpace(e.KeyChar) Then
            e.KeyChar = ""
        End If
    End Sub

    Private Sub txt_id_autor_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt_id_autor.KeyPress, txt_nombre.KeyPress, txt_apellido.KeyPress
        e.KeyChar = ""
    End Sub

    Private Sub botones(ByVal flag As Boolean)
        Me.btn_nuevo.Enabled = flag
        Me.btn_salir.Enabled = flag
        Me.btn_cancelar.Enabled = Not flag
        Me.btn_guardar.Enabled = Not flag
        Me.btn_eliminar.Enabled = Not flag
        Me.btn_modificar.Enabled = Not flag
        Me.btn_buscar_autor.Enabled = Not flag
    End Sub

    Private Sub cargarGrillaTemas()
        Dim tabla As New DataTable
        Dim sql As String = "SELECT tema.codigo_tema, tema.titulo, tema.duracion, autor.nombre, autor.apellido FROM (tema INNER JOIN autor on autor.id_autor = tema.id_autor)"
        tabla = datos_clase.ejecutar_sql(sql)
        grilla_temas.Rows.Clear()
        For i = 0 To tabla.Rows.Count - 1
            grilla_temas.Rows.Add()
            grilla_temas.Rows(i).Cells(0).Value = tabla.Rows(i)(0)
            grilla_temas.Rows(i).Cells(1).Value = tabla.Rows(i)(1)
            grilla_temas.Rows(i).Cells(2).Value = tabla.Rows(i)(2)
            grilla_temas.Rows(i).Cells(3).Value = tabla.Rows(i)(3)
            grilla_temas.Rows(i).Cells(4).Value = tabla.Rows(i)(4)
        Next
    End Sub

    Private Sub cargarNacionalidades()
        Dim tabla As Data.DataTable = datos_clase.leo_tabla("nacionalidad")
        cmb_nacionalidad.Items.Clear()
        cmb_nacionalidad.DataSource = tabla
        cmb_nacionalidad.ValueMember = "id_nacionalidad"
        cmb_nacionalidad.DisplayMember = "nombre"
        cmb_nacionalidad.SelectedIndex = -1
    End Sub

    Private Function validar()
        Dim flag As Boolean = True
        tratamiento.labels_Color(Color.Black, Me.Controls)

        If String.IsNullOrEmpty(txt_titulo.Text) Then
            lbl_titulo.ForeColor = Color.Red
            txt_titulo.Focus()
            flag = False
        End If

        If String.IsNullOrEmpty(msk_duracion.Text) Then
            lbl_duracion.ForeColor = Color.Red
            msk_duracion.Focus()
            flag = False
        End If

        If String.IsNullOrEmpty(txt_id_autor.Text) Then
            btn_buscar_autor.Focus()
            flag = False
        End If

        Return flag
    End Function

    Private Function validarUso() As Boolean

        Dim consulta As String = "select * from temasxcd where codigo_tema = '" & Me.grilla_temas.CurrentRow.Cells(0).Value & "'"
        Dim tabla As New Data.DataTable
        tabla = datos_clase.ejecutar_sql(consulta)
        If tabla.Rows.Count = 0 Then
            Dim consulta2 As String = "select * from temasxinterprete where codigo_tema = '" & Me.grilla_temas.CurrentRow.Cells(0).Value & "'"
            tabla = datos_clase.ejecutar_sql(consulta2)
            If tabla.Rows.Count = 0 Then
                Return False
            Else
                Return True
            End If
        Else
            Return True
        End If
    End Function

    Private Sub Gestion_Temas_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        botones(True)
        tratamiento.habilitar(False, Me.Controls)
        tratamiento.habilitar(False, grp_autor.Controls)
        cargarNacionalidades()
        cargarGrillaTemas()
        btn_nuevo.Focus()
    End Sub


    Private Sub btn_nuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_nuevo.Click
        botones(False)
        btn_eliminar.Enabled = False
        btn_modificar.Enabled = False
        tratamiento.habilitar(True, Me.Controls)
        tratamiento.habilitar(True, grp_autor.Controls)
        cmb_nacionalidad.Enabled = False
        txt_titulo.Focus()
        operacion = estado.insertar

    End Sub

    Private Sub btn_guardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_guardar.Click
        If validar() = True Then
            If MessageBox.Show("¿Desea guardar el tema?", "Notificación", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
                If guardar() = 1 Then
                    MessageBox.Show("Carga realizada con exito.", "Notificacion", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    cargarGrillaTemas() 
                Else
                    MessageBox.Show("Error al realizar la carga.", "Notificacion", MessageBoxButtons.OK, MessageBoxIcon.Error)
                End If
                tratamiento.limpiar(Me.Controls)
                tratamiento.limpiar(grp_autor.Controls)
                tratamiento.habilitar(False, Me.Controls)
                tratamiento.habilitar(False, grp_autor.Controls)
                tratamiento.labels_Color(Color.Black, Me.Controls) 
                botones(True)
                btn_nuevo.Focus()
                operacion = estado.inicial
            End If
        Else
            MessageBox.Show("Complete los datos que faltan!", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End If
    End Sub

    Private Function guardar() As Integer
        Dim conexion As New SqlClient.SqlConnection
        Dim cmd As New SqlClient.SqlCommand
        conexion.ConnectionString = datos_clase._cadena
        conexion.Open()
        cmd.Connection = conexion
        cmd.CommandType = CommandType.Text
        Dim sql As String = "insert into " & nombre_tabla & "(titulo, duracion, id_autor) values ('"
        sql &= txt_titulo.Text & "','" & msk_duracion.Text & "','" & txt_id_autor.Text & "')"
        cmd.CommandText = sql
        Dim filas As Integer = cmd.ExecuteNonQuery
        conexion.Close()
        Return filas
    End Function

    Private Sub btn_modificar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_modificar.Click
        If validar() = True Then
            If MessageBox.Show("¿Desea modificar el " & nombre_tabla & "?", "Consulta", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
                Dim conexion As New SqlClient.SqlConnection
                Dim cmd As New SqlClient.SqlCommand
                Dim consulta As String = ""
                conexion.ConnectionString = datos_clase._cadena
                conexion.Open()

                consulta = "update " & nombre_tabla
                consulta &= " set titulo = '" & Me.txt_titulo.Text & "',"
                consulta &= " duracion = '" & Me.msk_duracion.Text & "',"
                consulta &= " id_autor = '" & txt_id_autor.Text & "'"
                consulta &= " where codigo_tema = '" & id & "'"

                cmd.CommandType = CommandType.Text
                cmd.CommandText = consulta
                cmd.Connection = conexion
                Dim filas As Integer = cmd.ExecuteNonQuery()
                conexion.Close()

                If filas = 1 Then
                    MessageBox.Show("Modificacion realizada.", "Notificacion", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    cargarGrillaTemas()
                Else
                    MessageBox.Show("Error al modificar", "Notificacion", MessageBoxButtons.OK, MessageBoxIcon.Error)

                End If
                tratamiento.limpiar(Me.Controls)
                tratamiento.limpiar(grp_autor.Controls)
                tratamiento.habilitar(False, Me.Controls)
                tratamiento.habilitar(False, grp_autor.Controls)
                tratamiento.labels_Color(Color.Black, Me.Controls)
                botones(True)
                btn_nuevo.Focus()
                operacion = estado.inicial
            End If
        End If
    End Sub


    Private Sub btn_cancelar_Click_(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_cancelar.Click
        If operacion = estado.insertar Then
            If MessageBox.Show("¿Desea cancelar la carga?", "Confirmacion", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
                tratamiento.limpiar(Me.Controls)
                tratamiento.limpiar(grp_autor.Controls)
                tratamiento.habilitar(False, Me.Controls)
                tratamiento.habilitar(False, grp_autor.Controls)
                tratamiento.labels_Color(Color.Black, Me.Controls)
                botones(True)
                btn_nuevo.Focus()
                operacion = estado.inicial
            End If
        Else
            If MessageBox.Show("¿Desea cancelar la modificacion?", "Confirmacion", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
                tratamiento.limpiar(Me.Controls)
                tratamiento.limpiar(grp_autor.Controls)
                tratamiento.habilitar(False, Me.Controls)
                tratamiento.habilitar(False, grp_autor.Controls)
                tratamiento.labels_Color(Color.Black, Me.Controls)
                botones(True)
                btn_nuevo.Focus()
                operacion = estado.inicial
            End If
        End If
    End Sub

    Private Sub btn_eliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_eliminar.Click
        If MessageBox.Show("¿Desea eliminar el " & nombre_tabla & "?", "Pregunta", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
            If validarUso() = False Then
                Dim conexion As New SqlClient.SqlConnection
                Dim cmd As New SqlClient.SqlCommand
                Dim consulta As String = "delete from " & nombre_tabla & " where codigo_tema = '" & id & "'"
                conexion.ConnectionString = datos_clase._cadena
                conexion.Open()
                cmd.Connection = conexion
                cmd.CommandType = CommandType.Text
                cmd.CommandText = consulta
                Dim filas As Integer = cmd.ExecuteNonQuery()
                conexion.Close()
                If filas = 1 Then
                    MessageBox.Show("Eliminacion realizada.", "Notificacion", MessageBoxButtons.OK, MessageBoxIcon.Information)
                    cargarGrillaTemas()
                Else
                    MessageBox.Show("Error al eliminar", "Notificacion", MessageBoxButtons.OK, MessageBoxIcon.Error)
                End If
                tratamiento.limpiar(Me.Controls)
                tratamiento.limpiar(grp_autor.Controls)
                tratamiento.habilitar(False, Me.Controls)
                tratamiento.habilitar(False, grp_autor.Controls)
                botones(True)
                btn_nuevo.Focus()
                operacion = estado.inicial
            Else
                MessageBox.Show("Existen CDs o interpretes usando este " & nombre_tabla & ". Elimine los CDs o los interpretes.", "Informacion", MessageBoxButtons.OK, MessageBoxIcon.Information)
            End If
        End If
    End Sub

    Private Sub grilla_temas_CellDoubleClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles grilla_temas.CellDoubleClick
        If operacion = estado.inicial Then
            Me.operacion = estado.modificar
            id = grilla_temas.CurrentRow.Cells(0).Value   
            Dim sql As String = "select titulo, duracion, id_autor from tema where codigo_tema = '" & id & "'"
            Dim tabla As Data.DataTable = datos_clase.ejecutar_sql(sql)
            Dim sql2 As String = "select nombre, apellido, id_nacionalidad from autor where id_autor = " & tabla.Rows(0)(2)
            Dim tabla2 As DataTable = datos_clase.ejecutar_sql(sql2)

            Me.txt_titulo.Text = tabla.Rows(0)(0)
            Me.msk_duracion.Text = tabla.Rows(0)(1)
            txt_id_autor.Text = tabla.Rows(0)(2)
            txt_nombre.Text = tabla2.Rows(0)(0)
            txt_apellido.Text = tabla2.Rows(0)(1)
            cmb_nacionalidad.SelectedValue = tabla2.Rows(0)(2)

            botones(False)
            tratamiento.habilitar(True, Me.Controls)
            tratamiento.habilitar(True, grp_autor.Controls)
            cmb_nacionalidad.Enabled = False
            txt_titulo.Focus()
            Me.btn_guardar.Enabled = False
        Else
            MessageBox.Show("Termine la operacion actual!", "Notificacion", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        End If
    End Sub

    Private Sub Gestion_Temas_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
        If operacion = estado.inicial Then
            If MessageBox.Show("¿Desea salir?", "Alerta", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.No Then
                e.Cancel = True
            End If
        Else
            MessageBox.Show("Termine la operacion actual!", "Notificacion", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            e.Cancel = True
        End If
    End Sub

    Private Sub btn_buscar_autor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_buscar_autor.Click
        Buscar_Autor.ShowDialog()
    End Sub

    Private Sub btn_salir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_salir.Click
        Close()
    End Sub
End Class